﻿using System.Linq;
using System.Web.Mvc;
using Storytelling.Entidades;
using Storytelling.Modelos;
using Storytelling.Negocio;
using Storytelling.Utils;
using System.Collections.Generic;

namespace Storytelling.Controllers
{
    public class VantagemController : BaseCrudController<Vantagem, VantagemFormModel>
    {
        protected override IServico<Vantagem, VantagemFormModel> Servico
        {
            get { return Servicos.Vantagem; }
        }

        protected override void EscolherCarregamento(Carga<Vantagem> carga, TipoCarregamento tipo)
        {
            carga.Carregar(ent => ent.PreRequisitos);
            carga.Carregar(ent => ent.Niveis);
        }

        [AutorizarEditor]
        public override ActionResult Form(long? id)
        {
            return base.Form(id);
        }

        [AutorizarEditor]
        public override ActionResult Form(VantagemFormModel model)
        {
            return base.Form(model);
        }

        [AutorizarEditor]
        public override ActionResult Excluir(long? id)
        {
            return base.Excluir(id);
        }

        [Authorize]
        public JsonResult CarregarVantagemNiveis(long? id)
        {
            IEnumerable<int> niveis = new int[0];

            if (id.HasValue)
            {
                Carga<Vantagem> carga = new Carga<Vantagem>();
                EscolherCarregamento(carga, TipoCarregamento.Autocompletar);
                niveis = Servico.Consultar(id.Value, carga).Niveis.Select(ent => ent.Nivel); 
            }

            return Json(niveis);
        }

        [Authorize]
        public JsonResult PegarProximoNivelDescontoVantagem(long? id, long? idVantagem, int? nivel)
        {
            KeyValuePair<int, bool> kvp = new KeyValuePair<int,bool>();

            if (id.HasValue)
            {
                kvp = Servicos.Humano.PegarProximoNivelDescontoVantagem(id.Value, idVantagem.Value, nivel.Value);
            }

            return Json(new { Nivel = kvp.Key, IsDesconto = kvp.Value });
        }
    }
}
